/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.una.scece.gestores;

import com.una.scece.clases.Curso;
import com.una.scece.conexion.Conexion;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author Erick
 */
public class gestorCurso {

    private static PreparedStatement stmt = null;
    private static ResultSet rs = null;
    private static Connection conn = null;
    private static Conexion cx = new Conexion();

    /**
     * @param curso Objeto para trabajar en la base de datos. Ademas de guardar
     * los datos del curso dentro de la base de datos
     */
    public static void guardarCurso(Curso curso) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call agregarCurso(?,?,?,?,?,?)");
        stmt.setString(1, curso.getCodigoCurso());
        stmt.setString(2, curso.getDescripcion());
        stmt.setString(3, curso.getNrc());
        stmt.setDouble(4, curso.getCosto());
        stmt.setString(5, curso.getCiclo());
        stmt.setInt(6, curso.getAnio());
        stmt.executeUpdate();
        stmt.close();
    }

    /**
     * @param curso Objeto para trabajar en la base de datos. Ademas de
     * actualizar los datos del curso dentro de la base de datos
     */
    public static void actualizarCurso(Curso curso) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call actualizarCurso(?,?,?,?,?,?)");
        stmt.setString(1, curso.getCodigoCurso());
        stmt.setString(2, curso.getDescripcion());
        stmt.setString(3, curso.getNrc());
        stmt.setDouble(4, curso.getCosto());
        stmt.setString(5, curso.getCiclo());
        stmt.setInt(6, curso.getAnio());
        stmt.executeUpdate();
        stmt.close();
    }

    /**
     *
     * @param curso para realizar consulta a la base de datos y obtener toda la
     * informacion respectiva del curso.
     * @return Datos del curso.
     * @throws Exception
     */
    public static void buscarCurso(Curso curso) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call buscarCurso(?)");
        stmt.setString(1, curso.getCodigoCurso());
        rs = stmt.executeQuery();
        rs.next();
        curso.setCodigoCurso(rs.getString("codigo"));
        curso.setDescripcion(rs.getString("nombre_curso"));
        curso.setNrc(rs.getString("nrc"));
        curso.setCosto(rs.getDouble("costo"));
        curso.setCiclo(rs.getString("ciclo"));
        curso.setAnio(rs.getInt("anio"));
        rs.close();
        stmt.close();
    }

    /**
     * @param curso Objeto para trabajar en la base de datos. Ademas de eliminar
     * los datos del curso dentro de la base de datos
     */
    public static void eliminarCurso(Curso curso) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call eliminarCurso(?)");
        stmt.setString(1, curso.getCodigoCurso());
        stmt.executeUpdate();
        stmt.close();
    }

    /**
     *
     * @return Lista con los cursos existentes dentro del Sistema
     * @throws Exception
     */
    public static ArrayList<Curso> listarCurso() throws Exception {
        ArrayList<Curso> lista = new ArrayList<Curso>();
        conn = cx.conectar();
        stmt = conn.prepareStatement("call listarCursos()");
        rs = stmt.executeQuery();
        while (rs.next()) {
            Curso curso = new Curso();
            curso.setCodigoCurso(rs.getString("codigo"));
            curso.setDescripcion(rs.getString("nombre_curso"));
            curso.setNrc(rs.getString("nrc"));
            curso.setCosto(rs.getDouble("costo"));
            curso.setCiclo(rs.getString("ciclo"));
            curso.setAnio(rs.getInt("anio"));
            lista.add(curso);
        }
        rs.close();
        stmt.close();
        return lista;
    }

    public static void asignarCursosEstudiante(String pIdentificacion, String pCodigo,String pTrimestre, int pAnio) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("CALL asignarCurso(?,?,?,?)");
        stmt.setString(1, pIdentificacion);
        stmt.setString(2, pCodigo);
        stmt.setString(3, pTrimestre);
        stmt.setInt(4, pAnio);
        stmt.executeUpdate();
        stmt.close();
    }
    
    public static void removerCursosEstudiante(String pIdentificacion, String pCodigo,String pTrimestre, int pAnio)throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("CALL quitarCurso(?,?,?,?)");
        stmt.setString(1, pIdentificacion);
        stmt.setString(2, pCodigo);
        stmt.setString(3, pTrimestre);
        stmt.setInt(4, pAnio);
        stmt.executeUpdate();
        stmt.close();
    }
}
